/*
 * @Copyright: 2016 www.yyfax.com Inc. All rights reserved.
 */
package com.jaws.core.compatible.service;

import java.io.Serializable;
import java.util.Date;

/**
 * 缓存服务
 * 
 * @author jiangmy
 * @date 2016-11-29 10:44:17
 * @since v1.0.0
 */
public interface CacheService {

	public String namespacedKey(String key);

	public <T extends Serializable> T get(String key);

	public <T extends Serializable> boolean set(String key, T object);

	public <T extends Serializable> void setAsyn(String key, T object);

	public <T extends Serializable> boolean set(String key, T object, int seconds);

	public <T extends Serializable> boolean set(String key, T object, Date expire);

	public <T extends Serializable> boolean setJson(String key, T object);

	public <T extends Serializable> boolean setJson(String key, T object, int seconds);

	public <T extends Serializable> boolean setJson(String key, T object, Date expire);

	public <T extends Serializable> T getJson(String key, Class<T> clazz);

	public boolean delete(String key);

	public int delete(String... keySet);

	public <T extends Serializable> boolean add(String key, T object);

	public <T extends Serializable> boolean add(String key, T object, int seconds);

	public <T extends Serializable> boolean add(String key, T object, Date expire);

	public int incrAndGet(String key);

	public int incrAndGet(String key, Date date);

	/**
	 * 当memcache不存在key时，添加key=defaultValue；否则就incr该key的值
	 * 
	 * <pre>
	 * 		addOrIncr("not_exists_key", 1); return 11;
	 * 		set("exists_key", 1); addOrIncr("exists_key", 1) return 2;
	 * </pre>
	 * 
	 * @author jiangmy
	 * @date 2017年10月25日 上午11:29:49
	 * @since v1.0.0
	 * @param key
	 * @param incrValue
	 * @return 返回操作执行后的值
	 */
	public long addOrIncr(String key, int incrValue);

	/**
	 * 当memcache不存在key时,返回-1；当decr结果小于0时，返回-1；
	 * 
	 * @author jiangmy
	 * @date 2017年10月25日 上午11:30:26
	 * @since v1.0.0
	 * @param key
	 * @param decrValue 递减的值，一般为1
	 * @return 返回操作执行后的值
	 */
	public long addOrDecr(String key, int decrValue);

	/**
	 * memcache原生incr
	 * 
	 * @author jiangmy
	 * @date 2017年10月31日 上午9:18:54
	 * @since v1.0.0
	 * @param key
	 * @return
	 */
	public long incr(String key);

	/**
	 * memcache原生decr
	 * 
	 * @author jiangmy
	 * @date 2017年10月31日 上午9:18:37
	 * @since v1.0.0
	 * @param key
	 * @return
	 */
	public long decr(String key);

}
